package com.ganzalang.gmall.designpatterns.factory.abstractfactory;

import lombok.extern.slf4j.Slf4j;

/**
 * @description: 不使用抽象工厂
 */
@Slf4j
public class WithoutAbstractFactoryPatternDemo {

    public static void main(String[] args) {
        // 现在要创建产品A1+产品B1的组合
//        ProductA1 productA1 = new ProductA1();
//        ProductB1 productB1 = new ProductB1();
//        productA1.execute();
//        productB1.execute();

        // 变成产品A1+产品B3的组合
        ProductA1 productA1 = new ProductA1();
        ProductB3 productB3 = new ProductB3();
        productA1.execute();
        productB3.execute();

        /**
         * 问题来了，调整产品组合的这个行为,如果你手动创建产品组合的代码，有100个地方A1+B1
         * 如果后期要调整产品组合，就要修改那100个地方
         * 不可维护，不可扩展
         */



    }

    public interface ProductA {
        void execute();
    }

    public interface ProductB {
        void execute();
    }

    public static class ProductA1 implements ProductA {

        @Override
        public void execute() {
            log.info("执行A1方法");
        }
    }

    public static class ProductA2 implements ProductA {

        @Override
        public void execute() {
            log.info("执行A2方法");
        }
    }

    public static class ProductA3 implements ProductA {

        @Override
        public void execute() {
            log.info("执行A3方法");
        }
    }

    public static class ProductB1 implements ProductB {

        @Override
        public void execute() {
            log.info("执行B1方法");
        }
    }

    public static class ProductB2 implements ProductB {

        @Override
        public void execute() {
            log.info("执行B2方法");
        }
    }

    public static class ProductB3 implements ProductB {

        @Override
        public void execute() {
            log.info("执行B3方法");
        }
    }


}
